// 函数
fn main() {

    test02();
}

// Rust 的函数参数必须指明类型
fn test01(num: i32) {

}

// 在 Rust 中函数就是表达式，因此我们可以把函数的返回值直接赋给调用者
// 函数的返回值就是函数体最后一条表达式的返回值，当然我们也可以使用 return 提前返回
fn test02() {
    println!("{}", test0201(false));

    println!("{}", test0201(true));
}

fn test0201(flag: bool) -> i32 {
    if flag {
        return 18;
    }
    15
}

// 永不返回的发散函数 !
// 当用 ! 作函数返回类型的时候，表示该函数永不返回( diverge function )
// 特别的，这种语法往往用做会导致程序崩溃的函数
fn dead_end() -> ! {
    panic!("你已经到了穷途末路，崩溃吧！");
}
// 下面的函数创建了一个无限循环，该循环永不跳出，因此函数也永不返回
fn forever() -> ! {
    loop {
      //...
    };
}

fn test03() {
    // 填空
    let b = fasle;

    let _v = match b {
        true => 1,
        // 发散函数也可以用于 `match` 表达式，用于替代任何类型的值
        false => {
            println!("Success!");
            panic!("we have no value for `false`, but we can panic")
        }
    };

    println!("Exercise Failed if printing out this line!");
}
   


